/**
 * 字典管理器
 * 用于管理系统字典数据
 */

// 字典数据存储
const dictData = new Map()

/**
 * 字典管理器类
 */
class DictManager {
  /**
   * 设置字典数据
   * @param {string} key - 字典键
   * @param {Array} data - 字典数据
   */
  static setDict(key, data) {
    dictData.set(key, data)
  }

  /**
   * 获取字典数据
   * @param {string} key - 字典键
   * @returns {Array} 字典数据
   */
  static getDict(key) {
    return dictData.get(key) || []
  }

  /**
   * 获取字典项标签
   * @param {string} dictKey - 字典键
   * @param {any} value - 字典值
   * @param {string} labelKey - 标签字段名，默认'label'
   * @param {string} valueKey - 值字段名，默认'value'
   * @returns {string} 字典项标签
   */
  static getDictLabel(dictKey, value, labelKey = 'label', valueKey = 'value') {
    const dict = this.getDict(dictKey)
    const item = dict.find(item => item[valueKey] === value)
    return item ? item[labelKey] : value
  }

  /**
   * 获取字典项值
   * @param {string} dictKey - 字典键
   * @param {string} label - 字典标签
   * @param {string} labelKey - 标签字段名，默认'label'
   * @param {string} valueKey - 值字段名，默认'value'
   * @returns {any} 字典项值
   */
  static getDictValue(dictKey, label, labelKey = 'label', valueKey = 'value') {
    const dict = this.getDict(dictKey)
    const item = dict.find(item => item[labelKey] === label)
    return item ? item[valueKey] : label
  }

  /**
   * 检查字典是否存在
   * @param {string} key - 字典键
   * @returns {boolean} 是否存在
   */
  static hasDict(key) {
    return dictData.has(key)
  }

  /**
   * 删除字典
   * @param {string} key - 字典键
   */
  static removeDict(key) {
    dictData.delete(key)
  }

  /**
   * 清空所有字典
   */
  static clear() {
    dictData.clear()
  }

  /**
   * 获取所有字典键
   * @returns {Array} 字典键数组
   */
  static getKeys() {
    return Array.from(dictData.keys())
  }

  /**
   * 批量设置字典
   * @param {object} dicts - 字典对象
   */
  static setDicts(dicts) {
    Object.keys(dicts).forEach(key => {
      this.setDict(key, dicts[key])
    })
  }

  /**
   * 获取所有字典数据
   * @returns {object} 所有字典数据
   */
  static getAllDicts() {
    const result = {}
    dictData.forEach((value, key) => {
      result[key] = value
    })
    return result
  }
}

// 初始化系统字典数据
const initSystemDicts = () => {
  // 卡片类型字典
  DictManager.setDict('cardType', [
    { label: '普通卡', value: 1, color: '#409EFF' },
    { label: 'VIP卡', value: 2, color: '#E6A23C' },
    { label: '钻石卡', value: 3, color: '#F56C6C' },
    { label: '黑金卡', value: 4, color: '#909399' }
  ])

  // 卡片状态字典
  DictManager.setDict('cardStatus', [
    { label: '正常', value: 1, color: '#67C23A' },
    { label: '冻结', value: 2, color: '#E6A23C' },
    { label: '注销', value: 3, color: '#F56C6C' },
    { label: '挂失', value: 4, color: '#909399' }
  ])

  // 调解状态字典
  DictManager.setDict('mediationStatus', [
    { label: '待受理', value: 1, color: '#E6A23C' },
    { label: '调解中', value: 2, color: '#409EFF' },
    { label: '调解成功', value: 3, color: '#67C23A' },
    { label: '调解失败', value: 4, color: '#F56C6C' },
    { label: '已撤销', value: 5, color: '#909399' }
  ])

  // 通知类型字典
  DictManager.setDict('noticeType', [
    { label: '系统通知', value: 1, color: '#409EFF' },
    { label: '政府公告', value: 2, color: '#E6A23C' },
    { label: '教育培训', value: 3, color: '#67C23A' },
    { label: '意见反馈', value: 4, color: '#F56C6C' }
  ])

  // 部门字典
  DictManager.setDict('department', [
    { label: '管理部', value: 1 },
    { label: '财务部', value: 2 },
    { label: '人事部', value: 3 },
    { label: '技术部', value: 4 },
    { label: '市场部', value: 5 },
    { label: '客服部', value: 6 }
  ])

  // 职位字典
  DictManager.setDict('position', [
    { label: '总经理', value: 1 },
    { label: '副总经理', value: 2 },
    { label: '部门经理', value: 3 },
    { label: '主管', value: 4 },
    { label: '专员', value: 5 },
    { label: '助理', value: 6 }
  ])

  // 性别字典
  DictManager.setDict('gender', [
    { label: '男', value: 1 },
    { label: '女', value: 2 },
    { label: '未知', value: 0 }
  ])

  // 审核状态字典
  DictManager.setDict('auditStatus', [
    { label: '待审核', value: 0, color: '#E6A23C' },
    { label: '审核通过', value: 1, color: '#67C23A' },
    { label: '审核拒绝', value: 2, color: '#F56C6C' }
  ])

  // 启用状态字典
  DictManager.setDict('enableStatus', [
    { label: '启用', value: 1, color: '#67C23A' },
    { label: '禁用', value: 0, color: '#F56C6C' }
  ])

  // 优先级字典
  DictManager.setDict('priority', [
    { label: '低', value: 1, color: '#909399' },
    { label: '中', value: 2, color: '#E6A23C' },
    { label: '高', value: 3, color: '#F56C6C' },
    { label: '紧急', value: 4, color: '#F56C6C' }
  ])

  // 文件类型字典
  DictManager.setDict('fileType', [
    { label: '图片', value: 'image', extensions: ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'] },
    { label: '文档', value: 'document', extensions: ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt'] },
    { label: '视频', value: 'video', extensions: ['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'] },
    { label: '音频', value: 'audio', extensions: ['mp3', 'wav', 'flac', 'aac', 'ogg'] },
    { label: '压缩包', value: 'archive', extensions: ['zip', 'rar', '7z', 'tar', 'gz'] }
  ])
}

// 初始化字典数据
initSystemDicts()

export default DictManager
export { DictManager }